//============================================================================
// Name        : GestionVehicules.cpp
// Author      : Houcine
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <sys/select.h>
#include <iostream>
#include <errno.h>
#include "Agence.h"
#include "DaoAgence.h"
#include "DaoClient.h"
#include "Client.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdio.h>
#include <netinet/in.h>
#include <string.h>
#include <string>
#include <stdlib.h>
using namespace std;

int main(){
	cout<<"\n\n**************** Gestion Location Véhicules -- Partie Client ****************\n"<<endl;
		int socketprim;
		int loue;
			  int longueurstruct;
			  int connectionserveur;
			  int arretserveur;
			  int choixmenu;
			  int erreur;
			  int taille;
			  typedef struct data {
				char mat[20];
				long agence;
				long client;
				int nb;
				char date[20];
			  } data;
			  data informations;
			  struct sockaddr_in adresse;
			longueurstruct = sizeof (struct sockaddr_in);
			  adresse.sin_family = AF_INET;	/* initialisation de l'adresse : le domaine */
			  adresse.sin_port = 9778;	/* initialisation de l'adresse : le port */
			  adresse.sin_addr.s_addr =INADDR_ANY;	/* initialisation de l'adresse : la machine (locale) */

			  socketprim = socket (AF_INET, SOCK_STREAM, 0);
			  if (socketprim == -1)
			    cout<<"Creation socket sur le client"<<endl;

			  /* connexion au serveur */
			    connectionserveur = connect (socketprim, (struct sockaddr *) &adresse, longueurstruct);
			    if (connectionserveur == -1)
			     cout<<"Erreur Connection mta3 le client"<<endl;
			    else{
			    arretserveur = 0;
			    if(arretserveur ==0)
			    cout<<"\nSalut!!\nServeur Détecté Veuillez faire votre choix!!:\n";
			    while (arretserveur == 0)
			        {


			    /*affichage du menu*/
			    cout<<"      ??????????????????????????MENU?????????????????????????????"<<endl;
			    cout<<"      ?   -----------------------------------------------------  ?"<<endl;
			    cout<<"      ?    | 1 | Louer   Voiture                                 ?"<<endl;
			    cout<<"      ?                                                          ?"<<endl;
			    cout<<"      ?    | 2 | Annuler Location                                ?"<<endl;
			    cout<<"      ?                                                          ?"<<endl;
			    cout<<"      ?    | 3 | Déconnection                                    ?"<<endl;
			    cout<<"      ?   -----------------------------------------------------  ?"<<endl;
			    cout<<"      ???????????????????????????????????????????????????????????"<<endl;

			    cout<<"      ******* Entrer Votre Choix *******\t"<<endl;
			    cin>>choixmenu;
			    erreur = write (socketprim, (int *) &choixmenu, sizeof (choixmenu));
			                     if (erreur==-1)
			    	                cout<<"\nErreur d'ecriture dans la socket!\n";
			                     if (choixmenu == 1)
			                    	{
			                    	  cout<<"Veuillez saisir le matricule de véhiule à louer : "<<endl;
			                    	  cin>>informations.mat;
			                    	  cout<<"Veuillez saisir l'agence : "<<endl;
			                    	  cin>>informations.agence;
			                    	  cout<<"Veuillez saisir le client : "<<endl;
			                    	  cin>>informations.client;
			                    	  cout<<"Veuillez saisir le nombre de jours : "<<endl;
			                    	  cin>>informations.nb;
			                    	  cout<<"Veuillez saisir la date : "<<endl;
			                    	  cin>>informations.date;
			                    	  erreur= write (socketprim, &informations, sizeof (informations));//envoi
			                    	  if(erreur!=-1)
			                    	       cout<<"\nInformations Transmises au Serveur avec Succès!\n";
			                    	  else
			                    	 		        cout<<"\nErreur d'ecriture dans la socketprim!\n";
			                    	 	erreur=read(socketprim,&loue,sizeof(loue));
												 taille=sizeof(loue);
												 if (erreur==-1)
												  printf("\nErreur de lecture dans la socketprim!\n");    
										 else if(erreur!=-1&&taille!=0)
													{
													if(loue==0)
													{
													sleep(5.01);
											cout<<"\n******************* Désolé Voiture louée ***************\\n\n"<<endl;
													}
													else
													{
													sleep(3.01);
										cout<<"\n****************** Voiture louée avec succés ****************\n\n"<<endl;
			                    	 	}
			                    	 	}
			                    	 	}
			                    else if(choixmenu == 2)
			                     {
			                    	 cout<<"Veuillez saisir le matricule de véhiule à rendre: "<<endl;
			                    	 cin>>informations.mat;
			                    	 erreur= write (socketprim, &informations, sizeof (informations));//envoi
			                    	  if(erreur!=-1)
			                    		  cout<<"\nInformation transmise au serveur avec succès!\n";
			                    	  else
			                    	      cout<<"\nErreur d'ecriture dans la socketprim!\n";
			                     }
			       else if(choixmenu == 3)
			                     {
			                  	//sleep(1.01);
			                  	printf("\nMERCI,Au revoir!\n");
			                  	arretserveur = 1;
			                    erreur = close(socketprim);
			                  	     if(erreur!=-1)
			                                  cout<<"\nSocketclient fermée avec succès!\n";
			                  	     else
			                  		  cout<<"\nSocket client fermeture impossible!\n";
			                         }

			        }//fin boucle while (arretserveur == 0)
			       }//fin else du [if(connectionserveur == -1)]
	return 0;
}
